package com.eastfair.venuebooking.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.eastfair.core.base.entity.Entity;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.eastfair.venuebooking.enumeration.ExhibitionTaskFinishStatusEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;
import com.eastfair.annotation.model.EchoVO;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 任务
 * </p>
 *
 * @author linan
 * @since 2022-06-08
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("vb_exhibition_task")
@ApiModel(value = "ExhibitionTask", description = "任务")
@AllArgsConstructor
public class ExhibitionTask extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 是否启用：1是；0否
     */
    @ApiModelProperty(value = "是否启用：1是；0否")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用：1是；0否")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 展会id
     */
    @ApiModelProperty(value = "展会id")
    @TableField(value = "exhibition_id")
    @Excel(name = "展会id")
    private Long exhibitionId;

    /**
     * 任务标题
     */
    @ApiModelProperty(value = "任务标题")
    @Size(max = 255, message = "任务标题长度不能超过255")
    @TableField(value = "task_name", condition = LIKE)
    @Excel(name = "任务标题")
    private String taskName;

    /**
     * 开始时间
     */
    @ApiModelProperty(value = "开始时间")
    @TableField(value = "start_time")
    @Excel(name = "开始时间", format = DEFAULT_DATE_TIME_FORMAT, width = 20)
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    @ApiModelProperty(value = "结束时间")
    @TableField(value = "end_time")
    @Excel(name = "结束时间", format = DEFAULT_DATE_TIME_FORMAT, width = 20)
    private LocalDateTime endTime;

    /**
     * 环节id
     */
    @ApiModelProperty(value = "环节id")
    @TableField(value = "segment_id")
    @Excel(name = "环节id")
    private Long segmentId;

    /**
     * 环节名称
     */
    @ApiModelProperty(value = "环节名称")
    @Size(max = 1024, message = "环节名称长度不能超过1024")
    @TableField(value = "segment_name", condition = LIKE)
    @Excel(name = "环节名称")
    private String segmentName;

    /**
     * 展厅id
     */
    @ApiModelProperty(value = "展厅id")
    @Size(max = 1024, message = "展厅id长度不能超过1024")
    @TableField(value = "space_id", condition = LIKE)
    @Excel(name = "展厅id")
    private String spaceId;

    /**
     * 展厅名称
     */
    @ApiModelProperty(value = "展厅名称")
    @Size(max = 1024, message = "展厅名称长度不能超过1024")
    @TableField(value = "space_name", condition = LIKE)
    @Excel(name = "展厅名称")
    private String spaceName;

    /**
     * 完成状态 #{NOT_FINISHED:未完成;HAVE_IN_HAND:进行中;COMPLETED:已完成}
     */
    @ApiModelProperty(value = "完成状态 #{NOT_FINISHED:未完成;HAVE_IN_HAND:进行中;COMPLETED:已完成}")
    @TableField(value = "finish_status")
    @Excel(name = "完成状态 #{NOT_FINISHED:未完成;HAVE_IN_HAND:进行中;COMPLETED:已完成}", replace = {"未完成_NOT_FINISHED", "进行中_HAVE_IN_HAND", "已完成_COMPLETED",  "_null"})
    private ExhibitionTaskFinishStatusEnum finishStatus;

    /**
     * 备注（任务描述）
     */
    @ApiModelProperty(value = "备注（任务描述）")
    @Size(max = 1024, message = "备注（任务描述）长度不能超过1024")
    @TableField(value = "remark", condition = LIKE)
    @Excel(name = "备注（任务描述）")
    private String remark;


    @Builder
    public ExhibitionTask(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, Long tenantId, 
                    Long exhibitionId, String taskName, LocalDateTime startTime, LocalDateTime endTime, Long segmentId, String segmentName, 
                    String spaceId, String spaceName, ExhibitionTaskFinishStatusEnum finishStatus, String remark) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.exhibitionId = exhibitionId;
        this.taskName = taskName;
        this.startTime = startTime;
        this.endTime = endTime;
        this.segmentId = segmentId;
        this.segmentName = segmentName;
        this.spaceId = spaceId;
        this.spaceName = spaceName;
        this.finishStatus = finishStatus;
        this.remark = remark;
    }

}
